#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>

int main()
{
  int p1=5;
  //创建5个子进程
  while(p1>0)
  {
      pid_t d = fork();
      if(d==0)
      {
        printf("我是子进程%d丫\n",getpid());
        sleep(2);
        //子进程执行完就退出
        exit(0);
      }
      //注意：子进程已经退出，根据父进程的p1来计数
      p1--;
  }
  //一起回收子进程
  pid_t wpid;
  while((wpid = waitpid(-1, NULL, WNOHANG)) != -1)
  {
    sleep(2);
    if(wpid>0)
    {
      printf("我回收了子进程!\n");
    }
  }
      //else
      //{
      //  while(1)
      //  {   
      //    //非阻塞等待
      //    pid_t pc = waitpid(-1,NULL,WNOHANG);
      //    if(pc==0)
      //    {
      //      printf("我可以自己干自己的事情!\n");
      //      sleep(2);
      //    }
      //    else if(pc>0)
      //    {
      //      printf("回收%d成功!\n",getpid());
      //      //每次确保回收完一个子进程
      //      break;
      //    }
      //    else
      //    {
      //      printf("执行错误\n");
      //     // break;
      //    }
      //  }
      //}
      //printf("p1==%d\n",p1--);
  return 0;
}
